/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package migracion;

import entidades.CicloNewlong;
import entidades.EtapaNewlong;
import entidades.Newlong;
import java.sql.SQLException;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author SBernardez
 */
public class ActualizarCicloNewlongDisponibilidad {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws SQLException {
        List<Newlong> newlongs = Newlong.listar();
        for (Newlong newlong : newlongs){
             List<CicloNewlong> ciclos = CicloNewlong.getCicloNewlongByNewlong(newlong.getId());
             long diferencia = 0;
             for(CicloNewlong ciclo : ciclos){
                 System.out.println("Ciclo N°:" + ciclo.getNumero() + " - Newlong: " + newlong.getId());
                 if (ciclo.getCapacidad() < ciclo.getCantidadAsignada()){
                     diferencia += ciclo.getCantidadAsignada()  - ciclo.getCapacidad();
                     System.out.println("Capacidad < asignada:" + diferencia);
                 }else{
                     if (diferencia > 0){
                         if (ciclo.getCantidadDisponible() >= diferencia){
                                     System.out.println("ciclo.getCantidadDisponible() >= diferencia" + diferencia);
//                                     ciclo.recalcularCantidadesYFechas(ciclo.getCapacidad() - diferencia);
                                     List<EtapaNewlong> etapas = EtapaNewlong.listar(ciclo.getId());
                                     long totalEtapas = 0l;
                                     long disponible = ciclo.getCantidadDisponible();
                                    for (EtapaNewlong etapa : etapas){
                                         long resta = etapa.getCantidad() - etapa.getOcupado();
                                         double proporcion = (double) resta/ disponible  ;
                                         long total = (long)(proporcion * diferencia) - 1 ;
                                         totalEtapas += total;
                                         etapa.setOcupado(etapa.getOcupado() + total);
                                         etapa.guardar();
                                     }

                                     if (totalEtapas != diferencia){
                                         if (totalEtapas < diferencia){
                                             List<EtapaNewlong> e = EtapaNewlong.listar(ciclo.getId());
                                             Iterator<EtapaNewlong> it = e.iterator();
                                             while (it.hasNext() && totalEtapas != diferencia){
                                                    EtapaNewlong et = (EtapaNewlong) it.next();
                                                    et.setOcupado(et.getOcupado() + 1);
                                                    totalEtapas = totalEtapas + 1;
                                                    et.guardar();
                                             }
                                             if (totalEtapas < diferencia){
                                                Iterator<EtapaNewlong> it2 = e.iterator();
                                                 while (it2.hasNext() && totalEtapas != diferencia){
                                                    EtapaNewlong et = (EtapaNewlong) it2.next();
                                                    et.setOcupado(et.getOcupado() + 1);
                                                    totalEtapas = totalEtapas + 1;
                                                    et.guardar();
                                               }
                                             }
                                         }else{
                                              List<EtapaNewlong> e = EtapaNewlong.listar(ciclo.getId());
                                             Iterator<EtapaNewlong> it = e.iterator();
                                             while (it.hasNext() && totalEtapas != diferencia){
                                                    EtapaNewlong et = (EtapaNewlong) it.next();
                                                    et.setOcupado(et.getOcupado() -1 );
                                                    totalEtapas = totalEtapas - 1;
                                                    et.guardar();
                                             }
                                             if (totalEtapas > diferencia){
                                                 Iterator<EtapaNewlong> it2 = e.iterator();
                                             while (it2.hasNext() && totalEtapas != diferencia){
                                                    EtapaNewlong et = (EtapaNewlong) it2.next();
                                                    et.setOcupado(et.getOcupado() -1 );
                                                    totalEtapas = totalEtapas - 1;
                                                    et.guardar();
                                             }
                                             }
                                         }
                                     }


                                     diferencia = 0;
                             }else{
                                      System.out.println("ciclo.getCantidadDisponible() < diferencia" + diferencia);
                                    diferencia = diferencia - ciclo.getCantidadDisponible() ;
//                                     ciclo.recalcularCantidadesYFechas(ciclo.getCapacidad() - ciclo.getCantidadDisponible());
                                     List<EtapaNewlong> etapas = EtapaNewlong.listar(ciclo.getId());
                                     for (EtapaNewlong etapa : etapas){
                                          etapa.setOcupado(etapa.getCantidad());
                                          etapa.guardar();
                                     }
                             }
                      }
                     }
                 }
             }
        

    }

}
